#ifndef CONFIG_USART_H
#define CONFIG_USART_H

#include "stdio.h"	
#include "sys.h" 

#define EN_USART1_RX 			  1		// 使能（1）或 禁止（0）串口1接收（必须为1）

/* RS485信号方向控制 */
#define RS485_TX_EN  PAout(11)	// RS485收发设置  发送模式==1  接收模式==0 
#define RS485_TX_MODE()      		GPIO_SetBits(GPIOA, GPIO_Pin_11)
#define RS485_RX_MODE()      		GPIO_ResetBits(GPIOA, GPIO_Pin_11)

/* 数据缓冲区大小定义 */
#define USART_RX_BUFFER_SIZE    256
#define USART_TX_BUFFER_SIZE    256

/* 串口接收状态机状态 */
typedef enum {
    USART_RX_STATE_IDLE = 0,    // 空闲状态
    USART_RX_STATE_RECEIVING,   // 接收中
    USART_RX_STATE_COMPLETE     // 接收完成
} USART_RX_State_t;

/* 串口数据结构 */
typedef struct {
    uint8_t rx_buffer[USART_RX_BUFFER_SIZE];    // 接收缓冲区
    uint8_t tx_buffer[USART_TX_BUFFER_SIZE];    // 发送缓冲区
    volatile uint16_t rx_index;                 // 接收索引
    volatile uint16_t tx_index;                 // 发送索引
    volatile USART_RX_State_t rx_state;         // 接收状态
    volatile uint32_t last_rx_time;             // 最后接收时间
} USART_Data_t;

/************************** 函数定义声明 **************************/
void RS485_init(u32 bound);														 // 串口初始化			
void USART1_SendByte(uint8_t data);										 // 单字节发送
void USART1_SendBytes(uint8_t *data, uint16_t len);		 // 多字节发送
void USART1_SendString(char *str);										 // 字符串发送
uint8_t USART1_ReceiveByte(void);
uint16_t USART1_GetRxDataLength(void);
uint8_t* USART1_GetRxBuffer(void);
void USART1_ClearRxBuffer(void);
void USART1_StartReceive(void);
void USART1_StopReceive(void);
uint8_t USART1_IsFrameComplete(void);






extern int callFloorNum;
extern int tickTime; 
extern int occupyRobot;
extern int callFlag;











#endif


